package com.atguigu.juc;

import java.util.concurrent.CountDownLatch;

/**
 * @author tongatong
 * @name CountDownLatch
 * @description
 * 问题描述：
 *  必须等教室里6个同学走完，班长才可以关灯。
 * 实现：
 *  6个同学：6个子线程，班长：主线程。
 *
 * 总结：
 *  CountDownLatch类的作用是：
 *  让一些线程阻塞，知道另一些线程执行完之后，才能执行。
 *  CountDownLatch类主要使用两个方法：
 *   （1）await()，阻塞该线程，知道计数为0.
 *   （2）countdown()，对计数进行减1的操作，直到计数为0.
 *  ☆☆countdown()应该放在方法的最后面，以此保证线程方法体中的操作是原子的。☆☆
 *
 * @date 2021/9/3
 * @time 21:12
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 1; i <= 6; i++) {
            new Thread(() -> {
                System.out.println("同学"+countDownLatch.getCount()+"离开");
                countDownLatch.countDown();
            }, String.valueOf(i)).start();
        }

        countDownLatch.await();
        System.out.println("班长"+Thread.currentThread().getName()+"\t"+"关灯。");

    }
}
